package com.ruoyi.teacher.service.impl;

import java.util.Date;
import java.util.List;

import com.ruoyi.common.core.exception.GlobalException;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.model.LoginUser;
import com.ruoyi.teacher.domain.TTeacherTask;
import com.ruoyi.teacher.dto.TaskDto;
import com.ruoyi.teacher.service.ITTeacherTaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.teacher.mapper.TTaskMapper;
import com.ruoyi.teacher.domain.TTask;
import com.ruoyi.teacher.service.ITTaskService;

/**
 * 领取任务Service业务层处理
 * 
 * @author ruoyi
 * @date 2022-12-27
 */
@Service
public class TTaskServiceImpl implements ITTaskService 
{
    @Autowired
    private TTaskMapper tTaskMapper;

    @Autowired
    private ITTeacherTaskService teacherTaskService;

    /**
     * 查询领取任务
     * 
     * @param id 领取任务主键
     * @return 领取任务
     */
    @Override
    public TTask selectTTaskById(Long id)
    {
        return tTaskMapper.selectTTaskById(id);
    }

    /**
     * 查询领取任务列表
     * 
     * @param tTask 领取任务
     * @return 领取任务
     */
    @Override
    public List<TTask> selectTTaskList(TTask tTask)
    {
        return tTaskMapper.selectTTaskList(tTask);
    }

    /**
     * 新增领取任务
     * 
     * @param tTask 领取任务
     * @return 结果
     */
    @Override
    public int insertTTask(TTask tTask)
    {
        return tTaskMapper.insertTTask(tTask);
    }

    /**
     * 修改领取任务
     * 
     * @param tTask 领取任务
     * @return 结果
     */
    @Override
    public int updateTTask(TTask tTask)
    {
        return tTaskMapper.updateTTask(tTask);
    }

    /**
     * 批量删除领取任务
     * 
     * @param ids 需要删除的领取任务主键
     * @return 结果
     */
    @Override
    public int deleteTTaskByIds(Long[] ids)
    {
        return tTaskMapper.deleteTTaskByIds(ids);
    }

    /**
     * 删除领取任务信息
     * 
     * @param id 领取任务主键
     * @return 结果
     */
    @Override
    public int deleteTTaskById(Long id)
    {
        return tTaskMapper.deleteTTaskById(id);
    }

    /**
     * 领取任务，添加表
     * @param taskDto
     */
    @Override
    public void addTeacherTask(TaskDto taskDto) {
        // 参数校验
        if (taskDto.getId() == null){
            throw new ServiceException("参数为空");
        }
        TTask tTask = selectTTaskById(taskDto.getId());
        if (tTask.getGetCount() == null) { // 第一次添加
            tTask.setGetCount(1);
            tTaskMapper.updateTTask(tTask);
            addTeacherTaskTable(taskDto);
        }else {
            // 执行业务
            if (tTask.getState() == 1){ // 状态是可领取
                if (tTask.getOneOff() != 2){ // 不是一次性的任务
                    tTask.setGetCount(tTask.getGetCount() + 1);
                    tTaskMapper.updateTTask(tTask);
                    // 添加老师任务表
                    addTeacherTaskTable(taskDto);
                } else if (tTask.getOneOff() == 2){ // 是一次性的任务
                    tTask.setState(2); // 被人领取后，修改状态为不可领取
                    tTask.setGetCount(1); // 设置次数为1
                    tTaskMapper.updateTTask(tTask);
                    // 添加老师任务表
                    addTeacherTaskTable(taskDto);
                }

            } else { // 状态不可领取
                throw new ServiceException("该任务不可领取！");
            }
        }



    }

    /**
     * 添加老师的任务的表
     * @param taskDto
     */
    private void addTeacherTaskTable(TaskDto taskDto) {

        LoginUser loginUser = SecurityUtils.getLoginUser();
        // 创建我的任务表
        TTeacherTask tTeacherTask = new TTeacherTask();
        tTeacherTask.setTaskName(taskDto.getTitle());
        tTeacherTask.setTaskNote(taskDto.getNote());
        tTeacherTask.setTeacherName(loginUser.getUsername()); // 当前登录人名字
        tTeacherTask.setCreateTime(new Date());
        tTeacherTask.setDeadline(taskDto.getDeadline());
        tTeacherTask.setStatus(1L); // 1是未完成
        teacherTaskService.insertTTeacherTask(tTeacherTask);
    }
}
